import Vue from 'vue'
import FastClick from 'fastclick'
import router from './router'
import Vuex from 'vuex'
import axios from 'axios'
import App from './App'
import vueg from 'vueg'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

import {
    ToastPlugin,
    AlertPlugin,
    ConfirmPlugin,
    LoadingPlugin
} from 'vux'

/**
 * 路由转场动画
 * **/
const options={
  duration: '0.3',
  forwardAnim: 'fadeInRight', //前进动画
  backAnim: 'fadeInLeft', //后退动画
  sameDepthDisable: false, //url深度相同时禁用动画，默认为false
  shadow:true, //值为false，转场时没有阴影的层次效果
  disable: false, //禁用转场动画，默认为false，嵌套路由默认为true
  nuxt: false //若使用后端渲染框架Nuxt，需要将此设为true，默认为false
}
Vue.use(vueg, router,options);
Vue.use(ElementUI)

/**
 * vuex
 * 全局设置$axios
 * **/
Vue.use(Vuex);

//全局ajax访问域名
global.API_HOST="http://tingapi.ting.baidu.com/v1/restserver/ting"; //正式地址

/**
 * fastclick
 * **/
FastClick.attach(document.body);

Vue.use(ToastPlugin, {
    position: 'top',
    type:'text',
    time:3000,
    width:'auto'
});
Vue.use(AlertPlugin);
Vue.use(ConfirmPlugin);
Vue.use(LoadingPlugin);

/**
 * store状态管理
 * **/
const storeJs=require('storejs');
const store = new Vuex.Store({
  state:{
    loading:false,//加载动画
    token:storeJs('token') ? storeJs('token') : {},//token值
    userInfo:storeJs('userInfo') ? storeJs('userInfo') : {},//用户信息
    laundryInfo:storeJs('laundryInfo') ? storeJs('laundryInfo') : {},//预约店铺信息
  },
  mutations:{
    load(state,loading){
      state.loading=loading;
    },
    /**
     * 更新用户信息
     * **/
    update_userInfo(state,userInfo){
      state.userInfo=userInfo;
      storeJs.set('userInfo',state.userInfo);
    },

    /**
     * 更新预约店铺信息
     * **/
    update_laundryInfo(state,laundryInfo){
      state.laundryInfo=laundryInfo;
      storeJs.set('laundryInfo',state.laundryInfo);
    },
    /**
     * 更新token值
     * **/
    update_token(state,token){
      state.token=token;
      storeJs.set('token',state.token);
    },

  },
  actions:{

  },
})

/**
 * 路由全局拦截器
 * **/
router.beforeEach((to,from,next)=>{
  store.commit('load',true);
  next()
})
router.afterEach(function (to,from) {
  store.commit('load',false);
})
/**
 * http请求全局拦截
 * **/
axios.interceptors.request.use(config=>{
  return config
},err=>{
  store.commit('load',false);
  Vue.$vux.toast.show('请求超时');
  return Promise.reject(err);
})

axios.interceptors.response.use(response=>{
  store.commit('load',false);
  return response;
},err=>{
    if(typeof err.response == 'undefined'){
        store.commit('load',false);
        console.dir(err);
        return Promise.reject(err);
    }
  store.commit('load',false);
  Vue.$vux.toast.show('请求失败:'+err.response.status);
  return Promise.reject(err);
})

Vue.prototype.$axios = axios;
Vue.prototype.$elementui = ElementUI;
Vue.config.productionTip = false;
/* 允许跨域请求携带cookie */
Vue.prototype.$axios.defaults.withCredentials=true;

/**
 * vue实例
 * **/
window.vues = new Vue({
  el: '#app',
  store,
  router,
  components: { App,ElementUI },
  template: '<App/>'
  // render: h => h(App)
});
